import { useUserStore } from '../stores/modules/user'
import TokenManager from '../utils/auth'
import { ElMessage } from 'element-plus'
import type { Router } from 'vue-router'

// 白名单路由
const WHITE_LIST = ['/login', '/register']
const DEFAULT_ROUTE = '/dashboard'

// 设置路由守卫
export function setupRouterGuard(router: Router) {
  // 路由前置守卫
  router.beforeEach(async (to, from, next) => {
    // 设置页面标题
    document.title = (to.meta?.title as string) || '健身房后台管理系统'

    // 获取用户store
    const userStore = useUserStore()

    // 检查是否在白名单中
    if (WHITE_LIST.includes(to.path)) {
      // 如果已登录且访问登录页，直接跳转到首页
      if (to.path === '/login' && userStore.isLoggedIn) {
        next({ path: DEFAULT_ROUTE })
        return
      }
      next()
      return
    }

    // 检查是否已登录
    if (userStore.isLoggedIn) {
      // 如果用户信息不存在，尝试获取用户信息
      if (!userStore.userInfo) {
        const success = await userStore.getUserInfo()
        if (!success) {
          // 获取用户信息失败，跳转到登录页
          next({ path: '/login' })
          return
        }
      }
      next()
      return
    }

    // 检查本地是否有Token
    const token = TokenManager.getAccessToken()
    if (token) {
      // 尝试获取用户信息
      const success = await userStore.getUserInfo()
      if (success) {
        next()
        return
      }
    }

    // 未登录且无Token，跳转到登录页
    next({ path: '/login', query: { redirect: to.fullPath } })
  })

  // 路由后置守卫
  router.afterEach(() => {
    // 关闭加载状态等操作
  })
}
